Amazon Lightsail で Amazon ECRのプライベートリポジトリがサポートされました

Amazon Lightsail で Amazon ECRのプライベートリポジトリがサポートされました

Clock Icon2022.05.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

Amazon Lightsailではコンテナサービスを作成することが出来ます。
本日のアップデートで、Amazon ECRのプライベートリポジトリの利用がサポートされました。

従来はパブリックリポジトリからプルするか、Lightsailアカウントへローカルからプッシュする方法がありました。

やってみる

早速、Lightsailにプライベートリポジトリ経由で何かイメージをデプロイしてみます。
まずはECRを覗いてみましょう。

どこで作成したのかまったく覚えてないのですが、いくつかプライベートイメージがECRに存在していたのでこれをデプロイしてみます。
おそらく以下あたりで作成したのだと思います。

プライベートリポジトリをLightsailへ追加

通常どおりLightsailでコンテナサービスを作成します。

プライベートイメージを利用するために、イメージタブでプライベートリポジトリを追加します。

LightsailとECRは同一リージョンである必要がありますのでご注意ください。
先程確認したリポジトリがリストされています。

その中のひとつを選択して追加してみます。

自動で追加前の事前処理が実行されます。
これは、LightsailがECRからイメージを取得するために、ECRのパーミッションポリシーに追加を行っていて、少し時間がかかります。

完了したら続行しましょう。
これで対象のプライベートリポジトリを利用できるようになります。

なお、先程の自動処理の結果ですが、以下のようにECR上へ許可が追加されています。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowLightsailPull-hoge0527",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/amazon/lightsail/ap-northeast-1/containers/hoge0527/private-repo-access/56h17up0mkdmm9d9ffb7mmcg6c7lfp1n96ece4gb8a4f11lqi9f0"
      },
      "Action": [
        "ecr:BatchGetImage",
        "ecr:GetDownloadUrlForLayer"
      ]
    }
  ]
}

上記は、CLIなどから手動で追加することも可能です。
手順は以下を確認してください。

あとは普通にデプロイ

あとは、デプロイタブからパブリックリポジトリなどを利用する場合と同様にデプロイするだけです。
ECRで確認したタグを使うのと、ここではインターネットからアクセスしたかったのでポート設定とパブリックエンドポイントの指定を忘れないようにします。

コンテナイメージがデプロイされました。
どうやら、ASP.NET Coreでデプロイしたサンプルイメージのようです。

追加されてないプライベートイメージを使うとどうなる?

デプロイタブではイメージURIを入力するので、プライベートリポジトリを追加しなくてもURIの入力自体は可能です。
こちらを行うとどうなるのか、試してみました。

以下のように、プライベートリポジトリだから追加するか?と問われます。
ここで承認すると、先程行ったイメージタブでのプライベートリポジトリの追加相当の作業を自動で行ってくれます。便利ですね。

さいごに

本日は、LightsailでサポートされたECRプライベートリポジトリ機能を使ってみました。
プライベートイメージを利用したいシーンはあると思いますが、従来はLightsailに限っては独自の方法でローカルからLightsailへプッシュするなどを行う必要がありました。
今後はプライベートリポジトリが利用できるので、App RunnerやECRなど他のコンテナサービス間との移植性を保ちながらプライベートイメージを運用出来そうですね。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.